جزوه · فصل سوم · جلسه ۳۳ · ماژول‌ها در لینوکس ← بازگشت به فهرست
📘 فصل سوم · جلسه ۳۳ ماژول‌ها در لینوکس
📅 تاریخ: شنبه، ۲۴ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat

▍ مقدمه

هسته لینوکس (Kernel) قلب سیستم‌عامل است و چهار قابلیت اصلی را مدیریت می‌کند: مدیریت پردازش‌ها، مدیریت حافظه، مدیریت دستگاه‌ها و سیستم فایل. برای افزودن قابلیت‌های جدید به هسته (مانند پشتیبانی از سخت‌افزار جدید یا یک سیستم فایل جدید)، دو روش وجود دارد: کامپایل کردن مجدد هسته و استفاده از ماژول‌ها.

🔑 ماژول (Module) چیست؟

ماژول یک قطعه کد است که می‌تواند به‌صورت پویا (Dynamic) به هسته لینوکس اضافه یا از آن حذف شود، بدون اینکه نیاز به راه‌اندازی مجدد سیستم یا کامپایل مجدد کل هسته باشد. ماژول‌ها معمولاً برای افزودن درایورهای سخت‌افزاری، پشتیبانی از سیستم‌فایل‌های جدید یا قابلیت‌های امنیتی استفاده می‌شوند.

▍ دو روش افزودن قابلیت به هسته

🔴 روش کامپایل کردن (Compiling)

  • سخت و زمان‌بر است.
  • نیاز به نصب ابزارهای کامپایل (مثل gcc، make) دارد.
  • خطاهای زیادی可能在 زمان کامپایل ایجاد می‌شود.
  • در قدیم، هسته‌ها ماژول نداشتند و هر تغییر کوچکی نیاز به کامپایل مجدد کل هسته داشت.
  • پس از کامپایل، برای اعمال تغییرات باید سیستم را ری‌بوت کنید.

🟢 روش ماژول (Module)

  • سریع‌تر و آسان‌تر است.
  • فقط بخش خاصی که نیاز به تغییر دارد کامپایل می‌شود، نه کل هسته.
  • ماژول‌ها را به‌راحتی می‌توان از هسته خارج (Unload) کرد.
  • ماژول‌ها در هسته بارگذاری می‌شوند تا درایورهای جدید یا قابلیت‌های جدید اضافه کنند.
  • بدون نیاز به ری‌بوت، ماژول‌ها قابل بارگذاری و حذف هستند.
⚠️ هشدار امنیتی: Rootkit

قابلیت بارگذاری ماژول‌های پویا، یک نقطه ضعف امنیتی نیز ایجاد کرده است. بدافزارهای پیشرفته به نام Rootkit می‌توانند خود را به صورت یک ماژول مخرب در هسته بارگذاری کنند و از دید ابزارهای عادی پنهان بمانند. این یکی از دلایل اصلی اهمیت امضای دیجیتال ماژول‌ها و محدود کردن بارگذاری ماژول‌های غیرمجاز است.

▍ فرمان‌های مدیریت ماژول

برای مدیریت ماژول‌های هسته در لینوکس، از دستورات زیر استفاده می‌شود:

lsmod (نمایش ماژول‌های بارگذاری‌شده)

کاربرد: لیست تمام ماژول‌های بارگذاری‌شده در هسته را به همراه وابستگی‌های آنها نمایش می‌دهد.

┌──(ya3in㉿kali)-[~] └─$ lsmod Module Size Used by mt7921e 53248 0 mt7921_common 24576 1 mt7921e mt792x_core 36864 1 mt7921e mt76_connac_lib 40960 1 mt792x_core mt76 61440 2 mt7921_common,mt792x_core mac80211 983040 3 mt76,mt7921_common,mt792x_core cfg80211 983040 2 mac80211,mt76 r8169 90112 0 ...

توضیح ستون‌ها: Module (نام ماژول)، Size (اندازه به بایت)، Used by (تعداد استفاده‌کنندگان و نام ماژول‌های وابسته).

modinfo (نمایش اطلاعات یک ماژول)

کاربرد: اطلاعات دقیق یک ماژول خاص را نمایش می‌دهد، مانند نویسنده، توضیحات، وابستگی‌ها و پارامترهای قابل تنظیم.

┌──(ya3in㉿kali)-[~] └─$ modinfo mt7921e filename: /lib/modules/6.1.0-kali7-amd64/kernel/drivers/net/wireless/mediatek/mt7921/mt7921e.ko license: GPL description: MediaTek MT7921E 802.11ax wireless driver author: Lorenzo Bianconi alias: pci:v000014C3d00007961sv*sd*bc*sc*i* depends: mt7921_common,mt792x_core,mt76_connac_lib,mt76,mac80211 intree: Y name: mt7921e vermagic: 6.1.0-kali7-amd64 SMP preempt mod_unload modversions ...

insmod (بارگذاری ماژول)

کاربرد: یک ماژول را مستقیماً در هسته بارگذاری می‌کند. این دستور وابستگی‌ها را به‌طور خودکار حل نمی‌کند و اگر ماژول به ماژول دیگری وابسته باشد، باید آن را نیز جداگانه بارگذاری کنید.

┌──(ya3in㉿kali)-[~] └─$ sudo insmod /path/to/module.ko

نکته: معمولاً از modprobe به جای insmod استفاده می‌شود، زیرا modprobe وابستگی‌ها را به‌طور خودکار مدیریت می‌کند.

modprobe (بارگذاری هوشمند ماژول)

کاربرد: ماژول را به همراه همه وابستگی‌هایش بارگذاری می‌کند. این دستور از فایل‌های پیکربندی در /etc/modprobe.d/ و /lib/modules/ برای پیدا کردن ماژول‌ها استفاده می‌کند.

┌──(ya3in㉿kali)-[~] └─$ sudo modprobe mt7921e └─$ sudo modprobe -r mt7921e # حذف ماژول با گزینه -r (remove)

گزینه‌های مهم modprobe:

  • -r یا --remove → حذف (Unload) ماژول از هسته.
  • -v یا --verbose → نمایش جزئیات بیشتر.
  • -n یا --dry-run → شبیه‌سازی اجرا بدون تغییر واقعی.
  • -c → نمایش تنظیمات فعلی modprobe.

▍ جدول خلاصه دستورات

دستور کاربرد
lsmod نمایش لیست ماژول‌های بارگذاری‌شده در هسته
modinfo [module] نمایش اطلاعات دقیق یک ماژول خاص
sudo insmod [file.ko] بارگذاری مستقیم ماژول (بدون مدیریت وابستگی‌ها)
sudo modprobe [module] بارگذاری ماژول به همراه همه وابستگی‌ها (روش پیشنهادی)
sudo modprobe -r [module] حذف (Unload) ماژول از هسته
sudo modprobe -v [module] بارگذاری ماژول با نمایش جزئیات

▍ تفاوت insmod و modprobe

ویژگی insmod modprobe
مدیریت وابستگی‌ها ❌ خیر (فقط ماژول مشخص شده را بارگذاری می‌کند) ✅ بله (همه وابستگی‌ها را به‌طور خودکار بارگذاری می‌کند)
نیاز به مسیر کامل ✅ بله (باید مسیر فایل .ko را مشخص کنید) ❌ خیر (فقط نام ماژول کافی است)
استفاده از مخازن ماژول ❌ خیر ✅ بله (از /lib/modules/ استفاده می‌کند)
کاربرد اصلی توسعه و تست ماژول‌های جدید مدیریت روزمره ماژول‌ها در سیستم

▍ مثال‌های عملی

• نمایش ماژول‌های مرتبط با شبکه

┌──(ya3in㉿kali)-[~] └─$ lsmod | grep -i network

• مشاهده اطلاعات ماژول کارت شبکه بی‌سیم

┌──(ya3in㉿kali)-[~] └─$ modinfo mt7921e

• بارگذاری و حذف یک ماژول

┌──(ya3in㉿kali)-[~] └─$ sudo modprobe vfat └─$ sudo modprobe -r vfat

توضیح: ماژول vfat (پشتیبانی از سیستم فایل FAT) را بارگذاری و سپس حذف می‌کند.

▍ ابزارهای شناسایی Rootkit

برای شناسایی ماژول‌های مخرب (Rootkit) در لینوکس، ابزارهای تخصصی وجود دارند. برخی از معروف‌ترین آنها:

⚠️ نکته امنیتی مهم:

روت‌کیت‌ها معمولاً خود را به صورت ماژول‌های هسته پنهان می‌کنند و از دستور lsmod پنهان می‌شوند. به همین دلیل، ابزارهای تخصصی مانند chkrootkit و rkhunter برای شناسایی آنها طراحی شده‌اند.

▍ جمع‌بندی

✅ تمرین پیشنهادی:
  • با lsmod ماژول‌های بارگذاری‌شده در سیستم خود را مشاهده کنید.
  • با modinfo اطلاعات یکی از ماژول‌ها (مثل modinfo vfat) را بررسی کنید.
  • ماژول vfat را با modprobe بارگذاری کرده و سپس با modprobe -r حذف کنید.
  • با lsmod | grep ماژول‌های مرتبط با شبکه یا USB را پیدا کنید.
  • در صورت تمایل، chkrootkit را نصب کرده و سیستم خود را اسکن کنید.